package demo.java.rmi;

import java.rmi.Remote;

/**
 * <h1>Java RMI（Java Remote Method
 * Invocation）</h1>是Java编程语言里，一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。
 * 远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。
 * 
 * 我们知道远程过程调用（Remote Procedure Call,
 * RPC）可以用于一个进程调用另一个进程（很可能在另一个远程主机上）中的过程，从而提供了过程的分布能力。 Java 的 RMI 则在 RPC
 * 的基础上向前又迈进了一步，即提供分布式对象间的通讯。 RMI（Remote Method
 * Invocation）为远程方法调用，是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。
 * 这两个虚拟机可以是运行在相同计算机上的不同进程中，也可以是运行在网络上的不同计算机中。
 * <p>
 * RMI包含部分：
 * <li>远程服务的接口定义
 * <li>远程服务接口的具体实现
 * <li>桩（Stub）和框架（Skeleton）文件
 * <li>一个运行远程服务的服务器
 * <li>一个RMI命名服务，它允许客户端去发现这个远程服务
 * <li>类文件的提供者（一个HTTP或者FTP服务器）
 * <li>一个需要这个远程服务的客户端程序
 * <p>
 * 在Spring中实现RMI：
 * <li>①在服务器端定义服务的接口，定义特定的类实现这些接口；
 * <li>②在服务器端使用org.springframework.remoting.rmi.RmiServiceExporter类来注册服务；
 * <li>③在客户端使用org.springframework.remoting.rmi.RmiProxyFactoryBean来实现远程服务的代理功能；
 * <li>④在客户端定义访问与服务器端服务接口相同的类
 * <p>
 * RMI的局限？
 * <li>RMI目前使用Java远程消息交换协议JRMP（Java Remote Messaging
 * Protocol）进行通信。JRMP是专为Java的远程对象制定的协议，由于JRMP是专为Java对象制定的，
 * 因此，RMI对于用非Java语言开发的应用系统的支持不足。不能与用非Java语言书写的对象进行通信（意思是只支持客户端和服务器端都是Java程序的代码的远程调用）。
 * <li>由于客户机和服务器都是使用Java编写的，二者平台兼容性的要求仅仅是双方都运行在版本兼容的Java虚拟机上。
 * <li>参数或者返回值如果是对象的话必须实现Serializable接口
 */
public class RmiDemo {

    /**
     * 
     */
    public void remote() {
        Remote remote = null;
    }

}
